<?php
require_once $_SERVER['DOCUMENT_ROOT'].'/model/DAO/DAOManager.php';
require_once $_SERVER['DOCUMENT_ROOT'].'/model/Service/Service.php';
require_once $_SERVER['DOCUMENT_ROOT'].'/entities/Person.php';
/**
 * Класс для работы с пользователями
 */
class PersonService extends Service {

	protected $empDAO;
	public function __construct($daoManager){
		parent::__construct($daoManager);
		parent::createDAO("PersonDAO");
		$this->empDAO = $this->daoManager->createDAO("EmployeeDAO");
	}

	/**
	 * Сохранить сотрудника
	 * @param Perosn $person Сотрудник, которого хотим сохранить
	 */
	public function save($person){
		if($person->getIdentity() == null){
			return $this->dao->create($perosn);
		}else{
			return $this->dao->update($person);
		}
	}

	/**
	 * Удалить сотрудника
	 * @param unknown $identity Идентефикатор сотрудника
	 */
	public function delete($identity){
		return $this->dao->delete($identity);
	}
	/**
	 * Прочитать сотрудника
	 * @param unknown $identity Идентефикатор сотрудника
	 */
	public function read($identity){
		$pers = $this->dao->read($identity);
		$posts = $this->empDAO->getPersonPosts($person);
		
		foreach($posts as $post) {
			$pers->addPost($post);
		}
		$this->dao->fillRoles($pers);
		return $pers;
	}
	/**
	 * Изменить пароль сотрудника
	 * @param Person $person Объект с измененным паролем
	 */
	public function changePassword($person){
		return $this->dao->changePassword($person);
	}

	/**
	 * Получить все роли сотрудника
	 */
	public function getRoles(){
		return $this->dao->getRoles();
	}

	/**
	 * Получить всех сотрудников
	 */
	public function getAll(){
		$persns = $this->dao->getAll();
		foreach ($persns as $pers){
			$posts = $this->empDAO->getPersonPosts($pers);
			
			foreach($posts as $post) {
				$pers->addPost($post);
			}
			$this->dao->fillRoles($pers);
		}
		return $persns;
	}

	/**
	 * Переключить роль пользователя (т.е., если роль была назначена,
	 * отменить назначение; если роль не назначена, назначить пользователю роль
	 * @param Integer $personIdentity Идентефикатор сотрудника
	 * @param Integer $roleIdentity Идентефикатор передаваемой роли
	 */
	public function switchRole($personIdentity, $roleIdentity){
		return $this->dao->switchRole($personIdentity, $roleIdentity);
	}
	/**
	 * Получить сотрудника по имени пользователя и хэшу пароля
	 * @param unknown $login Имя пользователя сотрудника
	 * @param unknown $password Хеш пароля сотрудника
	 */
	public function authorization($login, $password){
		$pers =$this->dao->authorization($login, $password);
		$posts = $this->empDAO->getPersonPosts($person);
		
		foreach($posts as $post) {
			$pers->addPost($post);
		}
		$this->dao->fillRoles($pers);
		return $pers;
	}
}
?>